后缀表达式

这道题应用到了栈的思想,也相当于一个模拟过程。

处理过程:扫描后缀表达式,只要遇到操作数将其进栈,遇到运算符则从栈中弹出两个操作数进行相应运算,将运算结果进栈,然后继续扫描,直到扫完位置,这时,栈底的数即为该后缀表达式的值。

发一下我的代码(C++)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring> //头文件
using namespace std;
int edg[1010];
char s[256]; //全局变量
int dfs(char s[256]) //扫描后缀表达式
{
int i=0,top=0,e;
while(i<=strlen(s)-2) //扫描到strlen(s)-2
{
switch(s[i]) //判断
{
case'+':edg[--top]+=edg[top+1];break; //+
case'-':edg[--top]-=edg[top+1];break; //-
case'*':edg[--top]*=edg[top+1];break; //*
case'/':edg[--top]/=edg[top+1];break; ///
default:e=0;
while(s[i]!='.')
e=e*10+s[i++]-'0'; //检查是否扫描到间隔符号'.'
edg[++top]=e;break;
}
i++;
}
return edg[top];
}
int main() //主程序
{
gets(s); //输入
printf("%d",dfs(s)); //输出
return 0;
}

希望我的代码能够帮助到大家!